;	���������� �� ����� ������ (256 ����)
;	-------------------------------------
; ������: Disp_line, Send_crlf
;
Disp_sector:                    
	call	Clear_screen		;������� ������
	Out_str	ReferenceLine		;������� ������� ���������
	call	Send_crlf		;������� ������ ������
	call	Send_crlf		; -"-
	call	Send_crlf		; -"-
	call	Send_crlf		; -"-
	xor	dx,dx			;������ Sector
	mov	cx,16			;����� ����� 16
.M:	call	Disp_line		;����� ������
	call	Send_crlf		;������� ������
	add	dx,16			;����� ������� ����� ��������� ������
	loop	.M			;�������� ����� �����
	ret
ReferenceLine	db	'F1-start|F2-record|F3-next|F4-edit|F5-previous|F6-arbitary|F10-end$'
;
;	��������� ��������� 16 ���� ������ � ���� ������
;			����������������� �����
;	------------------------------------------------
; �����: DX - ����� ������� ����� ������ � Sector
; ������: Write_hex, Write_char
; ������: Sector
;
Disp_line:
	push	bx
	push	cx
	push	dx              
	mov	bx,dx			;� BX ����� ������� �����
	add	dx,[Address]    	;����� ������ �������
	call	Write_word_hex		; ����� ������
	mov	dl,' '			;����� �� �����
	call	Write_char		; �������
	mov	cx,16			;������� ������
	push	bx			;�������� ����� ������� �����
.M1:	mov	dl,[Sector+bx]		;�������� ���� ����
	call	Write_byte_hex		;����� ������������������ �����
	mov	dl,' '			;����� �� �����
	call	Write_char		; �������
	inc	bx			;������� �� ���������
	loop	.M1			; ������
	pop	bx			;������� ����� ������� �����
	mov	cx,16			;������� ������
.M2:	mov	dl,[Sector+bx]		;�������� ���� ����
	call	Write_char		;������� ������ �� �����
	inc	bx			;������� �� ���������
	loop	.M2			; ������
	pop	dx
	pop	cx
	pop	bx
	ret
;
;	�������� � ���������� Sector ���������� ������� ������, ���������
;			����� �������� � ���������� Address
;	-----------------------------------------------------------------
;
Read_sector:
	push	cx
	push	si
	push	di              
	pushf				;��������� ���� ����������� DF
	mov	si,[Address]		;������ ����������
	mov	di,Sector		;���� ����������
	cld				;�������� ���� DF
	mov	cx,256			;� �������� ����� ����
	rep	movsb			;��������� ������� ������
	popf				;�������������� ����� DF
	pop	di
	pop	si
	pop	cx
	ret
;
;	�������� � ���������� Sector ��������� ������ �������� ������ ���������,
;			�������� 0 � ���������� Address
;	------------------------------------------------------------------------
;
Init_sector:
	mov	[Address],word 0	;�������� 0 � ���������� Address
	call	Read_sector		;�������� ���������� ������� ������ � ������� 0
	call    Disp_sector		;������� ������ �� �����
	ret
;
;	�������� � ���������� Sector ���������� ������ �������� ������ ���������,
;		�������� ��������� ����� ����� ������� � ���������� Address
;	-------------------------------------------------------------------------
;
Prev_sector:
	push	bx
	mov	bx,[Address]		;�������� ����� � ������� BX
	or	bx,0            	;���� ����� ����� 0
	jz	.M			; �� ������ �� ������
	sub	bx,100h         	;��������� �����
	mov	[Address],bx		; �� 256
.M:	call	Read_sector     	;�������� ������ ������ � ����� �������
	call	Disp_sector		;������� ������ �� �����
	pop	bx
	ret
;
;	�������� � ���������� Sector ��������� ������ �������� ������ ���������,
;		�������� ��������� ����� ����� ������� � ���������� Address
;	-------------------------------------------------------------------------
;
Next_sector:
	push	bx
	mov	bx,[Address]		;�������� ����� � ������� BX
	cmp	bx,0FF00h		;���� ����� ����� 65280
	jz	.M			; �� ������ �� ������
	add	bx,100h         	;����������� �����
	mov	[Address],bx		; �� 256
.M:	call	Read_sector		;�������� ������ ������ � ����� �������
	call	Disp_sector		;������� ������ �� �����
	pop	bx
	ret
;
;	�������� � ���������� Sector N-� ������ �������� ������ ���������,
;		�������� ��������� ����� ����� ������� � ���������� Address
;	-------------------------------------------------------------------
;
N_sector:
	push	bx
	call	Send_crlf		;������� ������
	Out_str	HeaderInputSector	;������� ���������
	call	Read_byte_hex		;��������� ���������� ����������������� �����
	shl	bx,8			;�������� ����� �� 8 ��������
	mov	[Address],bx		;�������� ����� �����
	call	Read_sector		;�������� ������ ������ � ����� �������
	call	Disp_sector		;������� ������ �� �����
	pop	bx
	ret
HeaderInputSector db	'Input number Sector: $'
;
;	������������ ���������� ���������� Sector � ������� ������
;	----------------------------------------------------------
;
Write_sector:
	push	cx
	push	si
	push	di		
	pushf				;��������� ���� ����������� DF
	mov	si,Sector		;������ ����������
	mov	di,[Address]		;���� ����������
	cld				;�������� ���� DF
	mov	cx,256			;� �������� ����� ����
	rep	movsb			;��������� ������� ������
	popf				;�������������� ����� DF
	pop	di
	pop	si
	pop	cx
	ret
%include	'Video_io.asm'	;������������� ��������	
%include	'Cursor.asm'	; -"-
%include	'Kbd_io.asm'	; -"-